perm filename POINTY.PAL[PNT,HE]1 blob
sn#327514 filedate 1978-01-12 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00009 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 .TITLE POINTY
C00004 00003 ROUTINE TO EXECUTE A MOVE WITH NO 'AL ROUTINES
C00008 00004 LOOK IF ANYONE HIT KEYBOARD, DO A WHERE, AND SEE IF MOTION WANTED
C00011 00005 ROUTINE TO DISPLAY CURRENT JOINT ANGLES
C00015 00006 ROUTINE TO DISPLAY CURRENT REFERENCE POWER SUPPLY READINGS
C00017 00007 FORCE SENSING/COMPLIANCE PATCH AREA
C00019 00008 SIMULTANEOUS HAND OPERATION
C00021 00009 LOCAL STORAGE AREA
C00027 ENDMK
C⊗;
.TITLE POINTY
TRANS ==1 ;SET TO 1 TO PRINT OUT EULER AS WELL AS JOINT ANGLES
HANDOP==0 ;=1 FOR SIMULTANEOUS HAND OPERATION
SNGSTP==0 ;CONDITIONAL ASSEMBLY FLAGS FOR ARM.PAL
DIAGY ==0
STDALN==1
TACCAL==0
NOYELW==1
TIMER ==0
ISLIN ==1
FRCDAT==0
.INSRT K1DEF.PAL[11,SYS]
.INSRT ALHEAD.PAL[AL,HE]
.INSRT ARM.PAL[AL,HE]
.INSRT BEJCZY.PAL[AL,HE]
.INSRT ARITH.PAL[AL,HE]
.INSRT IO.PAL[3,BES]
.IFNZ TRANS
.INSRT ARMSOL.PAL[al,he]
.INSRT EULER.PAL[AL,HE]
.IFF
UPDATE:
SOLVE: 0
.ENDC
;COMMUNICATION LINK FOR "TLKEF5", "WHERE" ROUTINE FOR THE PDP10
MASLC5==110100 ;ADDRESS OF MASTER NUMBER TO SIGNAL PDP10 WE ARE ALIVE
TRNADR==110102 ;SAVE TRANSFORM DATA IN HERE
JTSADR==110162 ;SAVE JOINT ANGLES IN HERE
MASTR5==12121 ;CHECK NUMBER TO PDP10
;COMMUNICATION LOCATION BETWEEN MOVE.SAI AND MOVE.PAL
MCLOC== 100000
;DEVICE MECHANISM BITS
YELARM== 1 ;MECHANISM BITS: YELLOW ARM, NOT INCLUDING HAND
YELHND== 2 ;YELLOW HAND
BLUARM== 4 ;BLUE ARM, NOT INCLUDING HAND
BLUHND== 10 ;BLUE HAND
;ROUTINE TO EXECUTE A MOVE WITH NO 'AL ROUTINES
POINTY: CLR JMPFRC ;NO FORCE COMPLIANCE
MOV #START,JOBSA
JMP 1000
START: MOV #DEVICE,R1 ;INITIALIZE BLUE ARM TO RUN
JSR PC,INTARM
TST R0 ;CHECK FOR ERRORS
BEQ PHEADR ;BRANCH IF NO INITIALIZATION ERROR
BADINT: MOV #BADSTR,SG ;ELSE TYPE ERROR MESSAGE
JSR PC,TYPERR
DISMIS
PHEADR: JSR PC,PRTHDR ;PRINT HEADER INFORMATION
CLR VT05 ; RESET VT05 FLAG
FORK #LOOK,#MLOOP,#USRDM
PRTW: MOV #COMWH,SG ;JUMP TOP LINE
JSR PC,TYPSTR
MOV #IOBUF,SG ;START BUILDING OUTPUT STRING IN HERE
MOV #BTH,R2 ;GET POINTERS JOINT READINGS
MOV #7,R3 ;7 JOINTS IN ALL
JTCLP: LDF @(R2)+,AC0 ;GET JOINT ANGLE
JSR PC,CVF ;CONVERT JOINT ANGLE TO STRING
SOB R3,JTCLP
MOVB #15,(SG)+ ;PUT IN A CR LF
MOVB #12,(SG)+
MOV #9.,R0 ;CHANGE STRING FORMAT FOR INTEGER NUMBER
CLR R1
JSR PC,FORMAT
MOV #BSRVOS,R1 ;GET POINTERS TO SERVOS
MOV #7,R3 ;CONVERT THE ACTUAL POT READINGS
NEXTP: MOV (R1)+,R0
LDCIF POT(R0),AC0 ;GET A/D READING
TST POT(R0) ;CHECK IF ROUND UP OR DOWN
BLT RNDDN
ADDF #40000,AC0 ;ROUND OFF READING
BR .+6
RNDDN: SUBF #40000,AC0
JSR PC,CVF ;CONVERT TO ASC
SOB R3,NEXTP
JSR PC,RSTFOR
CLRB (SG)
MOV #IOBUF,SG ;TYPE OUT WHOLE STRING
JSR PC,TYPSTR
.IFNZ TRANS
MOV #TRNADR,R0 ;GET CURRENT TRANSFORM IN HERE
MOV #THPTR,R1 ;POINT TO THE CURRENT JOINT ANGLES
MOV #BLUARM,R2 ;USE SOLUTION FOR BLUE ARM
JSR PC,UPDATE ;COMPUTE THE CURRENT TRANSFORM
MOV #TRNADR,R0 ;COMPUTE THE EULER ANGLES
MOV #EANGLE,R1 ;PUT THEM IN HERE
JSR PC,EULER
MOV #IOBUF,SG ;CONVERT TO STRING FOR OUTPUT
MOVB #15,(SG)+ ;PUT IN A CR LF LF
MOVB #12,(SG)+
MOVB #12,(SG)+
MOV #6,R0
MOV #EANGLE,R1
EANGC: LDF (R1)+,AC0
JSR PC,CVF
SOB R0,EANGC ;REPEAT TILL DONE
CLRB (SG)
MOV #IOBUF,SG ;TYPE OUT THE EULER ANGLES
JSR PC,TYPSTR
MOV #BTH,R0 ;TRANSFER THE JOINT ANGLES TO PDP10
MOV #JTSADR,R1 ; COMMUNICATIONS TABLE
MOV #7,R2 ;6 JOINTS + HAND
RHTLP: LDF @(R0)+,AC0
STF AC0,(R1)+
SOB R2,RHTLP
MOV #MASTR5,MASLC5 ;INDICATE TO PDP10 THAT "WHERE" IS WORKING
.ENDC
TST PRTDVB ;PRINT OUT DEVICE BLOCK?
BEQ $2
JSR PC,PRTDB ;YES, JUMP TO RELEVANT ROUTINE
$2: TST VT05
BEQ $3
DISMIS
$3: JMP PRTW
; LOOK IF ANYONE HIT KEYBOARD, DO A WHERE, AND SEE IF MOTION WANTED
LOOK: PDBLK 2,100,FP ; SET UP PBD FOR PROCESS THAT LOOKS AT MASTER NO
; READS ARM POSITIONS AND CHECKS IF ANYTHING FROM 10
MLOOP: TST KBIS ;CHECK IF ANYONE HIT VT05 KEYBOARD
BEQ ELFRDY
CLRB KBIR
CLR MASLC5 ;INDICATE "WHERE" NOT ACTIVE
MOV #1,VT05 ;INDICATE INTERRUPT FROM VT05
DISMIS
ELFRDY: CMP #54321,MCLOC ;CHECK IF DATA BLOCK ARRIVED FROM 10
BEQ MOTION
MOV #12345,MCLOC ;INDICATE ELF READY FOR DATA BLOCK
MOV #BARM+BHAND,WLST ;DO A WHERE FOR THE BLUE ARM
MOV #WLST,R0
MOV #DEVICE,R1
JSR PC,WHERE ;READ THE JOINT POSITIONS
TST R0 ;CHECK IF ANY ERRORS
BEQ $1 ;BRANCH IF OK
MOV #BADW,SG ;ELSE TYPE ERROR MESSAGE
JSR PC,TYPERR
$1: SLEEP #20 ; GO TO SLEEP FOR 20 MSECS
BR MLOOP
;START OF MOVE CODE
MOTION: MOV #12345,MCLOC ;INDICATE ELF ALIVE FOR DATA BLOCK
MOV #MCLOC+4,R0 ;POINT TO COEFFICIENT LIST
MOV #DEVICE,R1 ;POINT TO DEVICE LIST
CMP #76,MCLOC+2 ;MOVE OR CENTER?
BNE CENCOD
JSR PC,MOVE
JMP CENCD2
CENCOD: JSR PC,CENTER
CENCD2: MOV #1,PRTDVB ;PRINT OUT NEW DEVICE BLOCK
MOV R0,STATSV ;SAVE STATUS WORD
JMP MLOOP
;ROUTINE TO DISPLAY CURRENT JOINT ANGLES
;START OF ROUTINE TO PRINT WHERE LINES
TYPERR: JSR PC,TYPSTR
MOV #IOBUF,SG ;TYPE ERROR CODE
JSR PC,CVO
MOV #IOBUF,SG
JSR PC,TYPSTR
JSR PC,CRLF
CLR MASLC5 ;INDICATE W NOT WORKING
RTS PC
PRTHDR: MOV #COMHD,SG ;GO TO TOP OF PAGE
JSR PC,TYPSTR
MOV #HEADER,SG ;TYPE OUT COLUMN HEADER
JSR PC,TYPSTR
MOV #8.,R0
MOV #2,R1
JSR PC,FORMAT
RTS PC
PRTDB: CLR PRTDVB
CMP #0,STATSV
BNE $4
MOV #CLRSCR,SG
JSR PC,TYPSTR
MOV #SUCCES,SG ;SUCCESSFUL MOVE
JSR PC,TYPSTR ;PRINT RELEVANT MESSAGE
RTS PC
$4: MOV #NOSCCS,SG ;TOO BAD UNSUCCESSFUL MOVE
JSR PC,TYPSTR
MOV #CLRSCR,SG
JSR PC,TYPSTR
MOV STATSV,R0
CMP #15,R0 ;LOOK AT LOW BYTE ERRORS
BLT $5
ASL R0 ;THIS IS LOW BYTE ERROR
MOV ERRMES(R0),SG
JSR PC,TYPSTR ;PRINT OUT RELEVANT MESSAGE
JSR PC,CRLF
JMP $8
$5: MOV #7,R1 ;THIS IS HIGH BYTE ERROR
MOV #16,R0
$7: ASRB STATSV+1
BCC $6
ASL R0
MOV ERRMES(R0),SG
JSR PC,TYPSTR
JSR PC,CRLF
$6: INC R0
SOB R1,$7
$8: MOV DEVICE,R2 ;GET THE NUMBER OF SERVOS ATTACHED
BEQ ENDS4 ;BRANCH IF NONE ATTACHED
MOV #COM7,SG ;ELSE TYPE OUT THE DEVICE BLOCK CONTENTS
JSR PC,TYPSTR
MOV #DEVICE+4,R1 ;START WITH THIS WORD
DEVLP: MOV (R1)+,R0
MOV #IOBUF,SG
JSR PC,CVO
MOV #IOBUF,SG
JSR PC,TYPSTR
MOV #SPACE3,SG
JSR PC,TYPSTR
SOB R2,DEVLP
ENDS4: MOV #CLRSCR,SG
JSR PC,TYPSTR
RTS PC
;ROUTINE TO DISPLAY CURRENT REFERENCE POWER SUPPLY READINGS
REF: MOV #START3,JOBSA
JMP 1000
START3: MOV #COM5,SG ;TYPE OUT THE CALIB. REFERENCE READING
JSR PC,TYPSTR
MOV REFER1,R0 ;GET REF. READING
MOV #IOBUF,SG
JSR PC,CVI
MOVB #54,(SG)+ ;PUT IN A COMMA AND SPACE CHARACTER
MOVB #40,(SG)+
MOV REFER2,R0 ;GET SECOND REF. READING
JSR PC,CVI
MOV #IOBUF,SG ;TYPE THEM OUT
JSR PC,TYPSTR
JSR PC,CRLF
CLR DEVICE ;DON'T READ ANY TACHS
REFLP: MOV #DEVICE,R1 ;READ THE REF. POWER SUPPLY VOLTAGE
JSR PC,SETREF
MOV #REFSG2,SG ;START BUILDING OUTPUT STRING IN HERE
MOV REFVT1,R0 ;GET REFERENCE READINGS AND CONVERT TO ASC
JSR PC,CVI
MOVB #54,(SG)+ ;PUT IN A COMMA AND SPACE CHARACTER
MOVB #40,(SG)+
MOV REFVT2,R0 ;GET THE SECOND READING
JSR PC,CVI
MOVB #40,(SG)+ ;PUT IN A FEW SPACE CHARACTERS
MOVB #40,(SG)+
MOVB #40,(SG)+
MOV #REFSTG,SG ;TYPE OUT WHOLE STRING
JSR PC,TYPSTR
TST KBIS ;CHECK IF ANYONE HIT VT05 KEYBOARD
BEQ REFLP
CLRB KBIR
JSR PC,CRLF
DISMIS
;FORCE SENSING/COMPLIANCE PATCH AREA
FPAT1: MOV #FTABLE+BLUARM,R0;INIT FORCE SENSING SYSTEM
MOV #C,R1 ;RELATIVE FORCE TRANS
JSR PC,SETC
TST R0 ;ERROR?
BEQ 1$
BPT
.IFNZ 0
1$: MOV #BLUARM+XFORCE,R0
LDF FFORCE,AC0
JSR PC,COMPLY
TST R0 ;ERROR?
BEQ 2$
BPT
2$: RTS PC
.BLKW 100
FPAT2: RTS PC
.BLKW 100
.IFF
1$: MOV FBITS,R0
MOV #FPDB,R1
MOV #FSSUB,R2
LDF FFORCE,AC0
JSR PC,FRCSIG
RTS PC
.BLKW 100
FPAT2: MOV FBITS,R0
MOV #FPDB,R1
JSR PC,FRCOFF
RTS PC
.BLKW 100
FSSUB: MOV #FMES,SG
JSR PC,TYPSTR
DISMIS
FBITS: BLUARM+XFORCE+SIGGE
FPDB: PDBLK 3,30,FP
FMES: .ASCIZ /
πFORCE SENSING TRIGGERED
/
.EVEN
.ENDC
FFORCE: .FLT2 0.0
C: .FLT2 1.0,0.0,0.0
.FLT2 0.0,1.0,0.0
.FLT2 0.0,0.0,1.0
.FLT2 0.0,0.0,0.0
;SIMULTANEOUS HAND OPERATION
.IFNZ HANDOP
SHAND: INC HANDGO
LDF CI+SRV14,AC0 ;PUT DYNAMIC COEF. IN DATA LIST
LDF CII+SRV14,AC1
STF AC0,HCI
STF AC1,HCII
MOV #HNDLST,R0 ;HAND COEFFICIENT LIST
MOV #HDEVIC,R1
JSR PC,MOVE
MOV #HMES,SG ;TYPE STATUS CODE
JSR PC,TYPSTR
MOV #HIOBUF,SG
JSR PC,CVO
MOV #HIOBUF,SG
JSR PC,TYPSTR
JSR PC,CRLF
CLR HANDGO
DISMISS
;LOCAL STORAGE AREA
HNDPDB: PDBLK 3,20,FP
HIOBUF: .BLKW 100
HDEVIC: .BLKW 10
HANDGO: 0
HNDLST: BHAND
0
0 ;NO SPECIAL MODES
0 ;NO WOBBLE
40. ;RELATIVE SEGMENT POINTER
5000. ;MOTION TIME
0 ;NO ASSOCIATED TRANS
0 ;NO RUN CODE
.FLT2 0.0
.FLT2 0.0
.FLT2 0.0
.FLT2 20.0
.FLT2 -30.0
.FLT2 12.0
HCI: .FLT2 0.0 ;CI
HCII: .FLT2 0.0 ;CII
0 ;NO OTHER SEGMENTS
HMES: .ASCIZ /
HAND FINISHED, STATUS = /
.EVEN
.ENDC
;LOCAL STORAGE AREA
DEVICE: .BLKW 33 ;DEVICE BLOCK
IOBUF: .BLKW 400.
EANGLE: .BLKW 12.
PRTMES: 0
JMPFRC: 0
PRTDVB: 0
VT05: 0
STATSV: 0
;WHERE COEFFICIENT DATA LIST
WLST: 374 ;JOINT SERVO BIT
0
;OUTPUT STRINGS
; TOP OF VT05 SCREEN
COMHD: .BYTE 35,10,10,10,37,10,10,10
.IFNZ TRANS
.BYTE 32,10,10,10,32,10,10,10
.ENDC
.BYTE 0
HEADER: .ASCII / P O I N T Y
JT 1 JT 2 JT 3 JT 4 JT 5 JT 6 HAND
-45.0 -165.0 6.75 -395.0 -95.0 -110.0 -0.20 LOW STOPS
190.0 -50.0 33.00 205.0 95.0 200.0 3.80 HIGH STOPS
180.0 -90.0 14.00 -90.0 90.0 0.0 PARK POSITION
CURRENT POS
A-D READINGS
/
.IFNZ TRANS
.ASCII / X Y Z O A T/
.ENDC
.BYTE 36
.BYTE 0
COMWH: .BYTE 35,10,10,10,12,10,10,10,12,10,10,10,12,10,10,10,12,10,10,10,12,10,10,10,12,10,10,10
.BYTE 0
BADW: .ASCIZ /
SERVO ERROR WHILE ATTEMPTING TO DO A "WHERE", ERROR CODE = /
BADSTR: .ASCIZ /
ARM INITIALIZATION FAILED, ERROR CODE = /
COM5: .ASCIZ /
REF. POWER SUPPLY READINGS DURING CALIBRATION = /
REFSTG: .ASCII /CURRENT REFERENCE READINGS = /
REFSG2: .ASCII / /
.BYTE 15,10,10,10,0
SUCCES: .ASCIZ /
LAST MOTION COMMAND WAS SUCCESSFUL
/
CLRSCR: .BYTE 37,10,10,10
.BYTE 0
NOSCCS: .ASCIZ /
LAST MOTION COMMAND WAS UNSUCCESSFUL
/
SPACE3: .ASCIZ / /
.EVEN
ERRMES: 0
ERR1
ERR2
ERR3
ERR4
ERR5
ERR6
ERR7
ERR10
ERR11
ERR12
ERR13
ERR14
ERR15
ERR4H
ERR1K
ERR2K
ERR4K
ERR10K
ERR20K
ERR40K
ERR1: .ASCIZ /
COULD NOT ATTACH TO REQUESTED JOINT(S)/
ERR2: .ASCIZ /
INCORRECT NUMBER OF JOINTS REQUESTED TO BE DRIVEN/
ERR3: .ASCIZ /
WIPERS COULD NOT BE READ WITHIN THEIR OPERATING RANGE/
ERR4: .ASCIZ /
ARM SOLUTION DOES NOT EXIST/
ERR5: .ASCIZ /
UNKNOWN TOUCH SENSOR REQUESTED/
ERR6: .ASCIZ /
NO MORE FREE SLOTS IN TOUCH SENSOR EVENT LIST/
ERR7: .ASCIZ /
EITHER ARM POWER SUPPLY IS OFF OR ONE OF BRAKES IS NOT SET/
ERR10: .ASCIZ /
REFERENCE POWER SUPPLY OUT OF RANGE/
ERR11: .ASCIZ /
ZERO VELOCITY TACHOMETER READING OUT OF RANGE/
ERR12: .ASCIZ /
ATTEMPTED TO SWITCH ARMS WHILE FORCE SERVOING/
ERR13: .ASCIZ /
NO MORE FREE SLOTS IN FORCE SENSOR EVENT LIST/
ERR14: .ASCIZ /
NEED ALL 6 ARM JOINTS IN ORDER TO DO FORCE SENSING OR COMPLIANCE/
ERR15: .ASCIZ /
CAN'T FORCE SERVO MOTION WITHOUT POLYNOMIAL/
ERR4H: .ASCIZ /
JOINT IS DOWN, INOPERABLE/
ERR1K: .ASCIZ /
CATASTROPHIC A-D ERROR HAS OCCURRED/
ERR2K: .ASCIZ /
PANIC BUTTON WAS PUSHED/
ERR4K: .ASCIZ /
EXCESSIVE JOINT FORCE ERROR/
ERR10K: .ASCIZ /
FUNCTION TOOK TOO LONG TO EXECUTE/
ERR20K: .ASCIZ /
JOINT STOPPED BEYOND STOP LIMIT/
ERR40K: .ASCIZ /
NO ARM SOLUTION WHILE DOING FORCE COMPLIANCE/
COM7: .ASCIZ /
THE DEVICE BLOCK SERVO WORDS ARE AS FOLLOWS:
/
EVMES: .ASCII /TOUCH SENSOR EVENT TRIGGERED
/
.BYTE 7,0
ASKFRC: .ASCIZ /
DO FORCE COMPLIANCE (0,1) = /
.EVEN
;MAIN PROGRAM PROCESSOR DESCRIPTOR BLOCK
MAINL: PDBLK 1,100,FP
TEMP == .
. = JOBDAT ;MAIN PROGRAM DESCRIPTOR BLOCK
MAINL
. = JOBSA ;START OF MAIN PROGRAM
START
. = JOBDM ;JOB DATA AREA MEMORY MAP
USRDM
. = TEMP ;RESTORE LOCATION COUNTER
.END POINTY